1 /*
2  * Hunt - a framework for web and console application based on Collie using Dlang development
3  *
4  * Copyright (C) 2015-2017  Shanghai Putao Technology Co., Ltd
5  *
6  * Developer: HuntLabs
7  *
8  * Licensed under the Apache-2.0 License.
9  *
10  */
11 
12 module hunt.http.code;
13 
14 enum HTTPCodes {
15     CONTINUE                        = 100,
16     SWITCHING_PROTOCOLS             = 101,
17     OK                              = 200,
18     CREATED                         = 201,
19     ACCEPTED                        = 202,
20     NON_AUTHORITATIVE_INFORMATION   = 203,
21     NO_CONTENT                      = 204,
22     RESET_CONTENT                   = 205,
23     PARTIAL_CONTENT                 = 206,
24 
25     MULTIPLE_CHOICES                = 300,
26     MOVED_PERMANENTLY               = 301,
27     FOUND                           = 302,
28     SEE_OTHER                       = 303,
29     NOT_MODIFIED                    = 304,
30     USE_PROXY                       = 305,
31     TEMPORARY_REDIRECT              = 307,
32 
33     BAD_REQUEST                     = 400,
34     UNAUTHORIZED                    = 401,
35     PAYMENT_REQUIRED                = 402,
36     FORHIDDEN                       = 403,
37     NOT_FOUND                       = 404,
38     METHOD_NOT_ALLOWED              = 405,
39     NOT_ACCEPTABLE                  = 406,
40     PROXY_AUTHENTICATION_REQUIRED   = 407,
41     REQUEST_TIMEOUT                 = 408,
42     CONFLICT                        = 409,
43     GONE                            = 410,
44     LENGTH_REQUIRED                 = 411,
45     PRECONDITION_FAILED             = 412,
46     REQUEST_ENTITY_TOO_LARGE        = 413,
47     REQUEST_URI_TOO_LARGE           = 414,
48     UNSUPPORTED_MEDIA_TYPE          = 415,
49     REQUESTED_RANGE_NOT_SATISFIABLE = 416,
50     EXPECTATION_FAILED              = 417,
51     TOO_MANY_REQUESTS               = 429,
52     UNAVAILABLE_FOR_LAGAL_REASONS   = 451,
53 
54     INTERNAL_SERVER_ERROR           = 500,
55     NOT_IMPLEMENTED                 = 501,
56     BAD_GATEWAY                     = 502,
57     SERVICE_UNAVALIBALE             = 503,
58     GATEWAY_TIMEOUT                 = 504,
59     HTTP_VERSION_NOT_SUPPORTED      = 505,
60 
61     // for WebDAV
62     MULI_STATUS                     = 207,
63     UNPROCESSABLE_ENTITY            = 422,
64     LOCKED                          = 423,
65     FAILED_DEPENDENCY               = 424,
66     INSUFFICIENT_STORAGE            = 507
67 }
68 
69 @safe nothrow @nogc pure:
70 
71 string HTTPCodeText(int code)
72 {
73     switch(code)
74     {
75         default: break;
76         case HTTPCodes.CONTINUE                         : return "Continue";
77         case HTTPCodes.SWITCHING_PROTOCOLS              : return "Switching Protocols";
78         case HTTPCodes.OK                               : return "OK";
79         case HTTPCodes.CREATED                          : return "Created";
80         case HTTPCodes.ACCEPTED                         : return "Accepted";
81         case HTTPCodes.NON_AUTHORITATIVE_INFORMATION    : return "Non-Authoritative Information";
82         case HTTPCodes.NO_CONTENT                       : return "No Content";
83         case HTTPCodes.RESET_CONTENT                    : return "Reset Content";
84         case HTTPCodes.PARTIAL_CONTENT                  : return "Partial Content";
85         case HTTPCodes.MULTIPLE_CHOICES                 : return "Multiple Choices";
86         case HTTPCodes.MOVED_PERMANENTLY                : return "Moved Permanently";
87         case HTTPCodes.FOUND                            : return "Found";
88         case HTTPCodes.SEE_OTHER                        : return "See Other";
89         case HTTPCodes.NOT_MODIFIED                     : return "Not Modified";
90         case HTTPCodes.USE_PROXY                        : return "Use Proxy";
91         case HTTPCodes.TEMPORARY_REDIRECT               : return "Temporary Redirect";
92         case HTTPCodes.BAD_REQUEST                      : return "Bad Request";
93         case HTTPCodes.UNAUTHORIZED                     : return "Unauthorized";
94         case HTTPCodes.PAYMENT_REQUIRED                 : return "Payment Required";
95         case HTTPCodes.FORHIDDEN                        : return "Forbidden";
96         case HTTPCodes.NOT_FOUND                        : return "Not Found";
97         case HTTPCodes.METHOD_NOT_ALLOWED               : return "Method Not Allowed";
98         case HTTPCodes.NOT_ACCEPTABLE                   : return "Not Acceptable";
99         case HTTPCodes.PROXY_AUTHENTICATION_REQUIRED    : return "Proxy Authentication Required";
100         case HTTPCodes.REQUEST_TIMEOUT                  : return "Request Time-out";
101         case HTTPCodes.CONFLICT                         : return "Conflict";
102         case HTTPCodes.GONE                             : return "Gone";
103         case HTTPCodes.LENGTH_REQUIRED                  : return "Length Required";
104         case HTTPCodes.PRECONDITION_FAILED              : return "Precondition Failed";
105         case HTTPCodes.REQUEST_ENTITY_TOO_LARGE         : return "Request Entity Too Large";
106         case HTTPCodes.REQUEST_URI_TOO_LARGE            : return "Request-URI Too Large";
107         case HTTPCodes.UNSUPPORTED_MEDIA_TYPE           : return "Unsupported Media Type";
108         case HTTPCodes.REQUESTED_RANGE_NOT_SATISFIABLE  : return "Requested range not satisfiable";
109         case HTTPCodes.EXPECTATION_FAILED               : return "Expectation Failed";
110         case HTTPCodes.UNAVAILABLE_FOR_LAGAL_REASONS    : return "Unavailable For Legal Reasons";
111         case HTTPCodes.INTERNAL_SERVER_ERROR            : return "Internal Server Error";
112         case HTTPCodes.NOT_IMPLEMENTED                  : return "Not Implemented";
113         case HTTPCodes.BAD_GATEWAY                      : return "Bad Gateway";
114         case HTTPCodes.SERVICE_UNAVALIBALE              : return "Service Unavailable";
115         case HTTPCodes.GATEWAY_TIMEOUT                  : return "Gateway Time-out";
116         case HTTPCodes.HTTP_VERSION_NOT_SUPPORTED       : return "HTTP Version not supported";
117 
118         // WebDAV status codes
119         case HTTPCodes.MULI_STATUS                      : return "Multi-Status";
120         case HTTPCodes.UNPROCESSABLE_ENTITY             : return "Unprocessable Entity";
121         case HTTPCodes.LOCKED                           : return "Locked";
122         case HTTPCodes.FAILED_DEPENDENCY                : return "Failed Dependency";
123         case HTTPCodes.INSUFFICIENT_STORAGE             : return "Insufficient Storage";
124     }
125 
126     if( code >= 600 ) return "Unknown";
127     if( code >= 500 ) return "Unknown server error";
128     if( code >= 400 ) return "Unknown error";
129     if( code >= 300 ) return "Unknown redirection";
130     if( code >= 200 ) return "Unknown success";
131     if( code >= 100 ) return "Unknown information";
132 
133     return "Unknown";
134 }
135 
136 bool isSuccessCode(HTTPCodes code)
137 {
138     return (code >= 200 && code < 300);
139 }